#include "IfVT.h"

#include <Windows.h>
#define ESC "\033"

void IfVT::SetCoord(Coord pos)
{
    printf(ESC"[%d;%dH", pos.Y + 1, pos.X + 1);
}

void IfVT::SetForegroundColor(Color color)
{
    if (color >= 0x0 && color < 0x8)
        printf(ESC"[3%hum", color);
    else if (color < 0x10)
        printf(ESC"[9%hum", color - 0x08);
}

void IfVT::SetBackgroundColor(Color color)
{
    if (color >= 0x0 && color < 0x8)
        printf(ESC"[4%hum", color);
    else if (color < 0x10)
        printf(ESC"[10%hum", color - 0x08);
}

void IfVT::ShowCursor(bool show)
{
    printf(ESC"[?25%c", show ? 'h' : 'l');
}

void IfVT::FontBold(bool bold)
{
    printf(ESC"[%dm", bold ? 1 : 22);
}

void IfVT::FontUnderline(bool underline)
{
    printf(ESC"[%dm", underline ? 4 : 24);
}

void IfVT::SetForegroundColorEx(Color r, Color g, Color b)
{
    if (r < 0x100 && g < 0x100 && b < 0x100)
        printf(ESC"[38;2;%hu;%hu;%hum", r, g, b);
}

void IfVT::SetBackgroundColorEx(Color r, Color g, Color b)
{
    if (r < 0x100 && g < 0x100 && b < 0x100)
        printf(ESC"[48;2;%hu;%hu;%hum", r, g, b);
}

void IfVT::SetTitle(std::string str)
{
    printf(ESC"]0;%s" ESC"\\", str.c_str());
}
